<?php

namespace app\adminapi\controller;

use think\Controller;
use think\Request;

class Auth extends BaseApi
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    public function index()
    {
        $params = input();
        # 判断他里面的type是否为空
        if (empty($params["type"]) && $params["type"] != "tree") {
            # 返回无限级分类
            $data = \app\common\model\Auth::select();
            $list = (new \think\Collection($data))->toArray();
            $list = get_cate_list($list);
        } else {
            # 返回树状级分类
            $data = \app\common\model\Auth::select();
            $list = (new \think\Collection($data))->toArray();
            $list = get_tree_list($list);
        }
        return $this->ok($list);
    }
    /**
     * 保存新建的资源
     *
     * @param  \think\Request  $request
     * @return \think\Response
     */
    public function save(Request $request)
    {
        # 接收数据
        $params = input();
        # 数据检测
        $validata = $this->validate($params, [
            "auth_name|权限名称" => "require",
            "pid|父级ID" => "require|egt:0|integer",
            "is_nav|是否菜单" => "require|in:0,1",
        ]);
        if ($validata !== true) {
            $this->fail($validata);
        }
        # 数据处理
        # 判断他pid是否是顶级
        if ($params["pid"] == 0) {
            $params["pid_path"] = 0;
            $params["level"] = 0;
        } else {
            $p_find = \app\common\model\Auth::where("id", $params["pid"])->find();
            # 判断是否能根据PID获取到一条数据
            if (!$p_find) {
                $this->fail("数据异常");
            }
            $params["pid_path"] = $p_find["pid_path"] . "_" . $p_find["id"];
            $params["level"] = $p_find["level"] + 1;
        }
        # 添加数据
        $data = \app\common\model\Auth::create($params, true);
        $find = \app\common\model\Auth::where("id", $data["id"])->find();
        # 返回数据
        $this->ok($find);
    }

    /**
     * 显示指定的资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function read($id)
    {
        $find = \app\common\model\Auth::field("id,auth_name,pid,pid_path,auth_c,auth_a,is_nav,level")->find($id);
        return $this->ok($find,200,"获取成功");
    }
    /**
     * 保存更新的资源
     *
     * @param  \think\Request  $request
     * @param  int  $id
     * @return \think\Response
     */
    public function update(Request $request, $id)
    {
        # 接收数据
        $params = input();
        # 数据检测
        $validata = $this->validate($params, [
            "auth_name|权限名称" => "require",
            "pid|父级ID" => "require|egt:0|integer",
            "is_nav|是否菜单" => "require|in:0,1",
        ]);
        if ($validata !== true) {
            $this->fail($validata);
        }
        # 数据处理
        # 判断他pid是否是顶级
        if ($params["pid"] == 0) {
            $params["pid_path"] = 0;
            $params["level"] = 0;
        } else {
            $p_find = \app\common\model\Auth::where("id", $params["pid"])->find();
            # 判断是否能根据PID获取到一条数据
            if (!$p_find) {
                $this->fail("数据异常");
            }
            $params["pid_path"] = $p_find["pid_path"] . "_" . $p_find["id"];
            $params["level"] = $p_find["level"] + 1;
            $find = \app\common\model\Auth::find($id);
            if(!$find){
                $this->fail("数据异常");
            }
            # 判断他修改的level等级是否小于他修改的等级，如果小于那就不能降级修改
            if($find["level"] < $params["level"]){
                $this->fail("不能降级修改");
            }
        }
        # 添加数据
        $data = \app\common\model\Auth::update($params,["id" => $id], true);
        $find = \app\common\model\Auth::where("id", $data["id"])->find();
        # 返回数据
        $this->ok($find,200,"修改权限成功");
    }

    /**
     * 删除指定资源
     *
     * @param  int  $id
     * @return \think\Response
     */
    public function delete($id)
    {
        # 根据ID去查询他下面是否还有子分类 如果有那就不能删除
        $data = \app\common\model\Auth::where("pid",$id)->count();
        # 判断他获取计算的是否大于0，如果大于0那就不能删除
        if($data > 0){
            # 返回数据
            $this->fail("分类下还有子分类不能删除");
        }
        # 如果没有那就删除数据
        \app\common\model\Auth::destroy($id);
        # 返回数据
        $this->ok("删除成功");
    }
    # 分配权限
    public function nav(){
        # 获取到用户id
        $user_id = input("user_id");
        // dump($user_id);
        # 根据用户id查询一条数据
        $role = \app\common\model\Admin::where("id",$user_id)->find();
        # 判断查询到的用户是不是等于超级管理员，如果是那就不用进行处理，获取全部权限
        if($role["username"] == "admin"){
            # 获取全部菜单权限
            $auth_data = \app\common\model\Auth::where("is_nav",1)->select();
        }else{
            # 如果不是超级管理员那就根据用户表里面role_id角色去查询对应的角色
            $role_data = \app\common\model\Role::where("id",$role["role_id"])->find();
            # 获取到角色表里面的role_auth_ids;
            $auth_id = $role_data["role_auth_ids"];
            # 根据role_auth_ids获取到他对应的权限
            $auth_data = \app\common\model\Auth::where("id","in",$auth_id)->where("is_nav",1)->select();
        }
        # 将获取到权限转为二维数组
        $list = (new \think\Collection($auth_data))->toArray();
        # 将数据处理，进行树状处理返回
        $list = get_tree_list($list);
        #　返回数据
        $this->ok($list);
    }
}
